﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SksApp
{
    public partial class frmStok : Form
    {
        public EventHandler Event { get; set; }
        public string StokKodu { get; set; }

        public frmStok()
        {
            InitializeComponent();
            cmbDoviz.Items.Add("TL");
            cmbDoviz.Items.Add("USD");
            cmbDoviz.Items.Add("EURO");

            cmbCinsi.Items.Add("Normal");
            cmbCinsi.Items.Add("Terazili");

            this.Load += new EventHandler(frmStok_Load);
            txtKodu.KeyDown += new KeyEventHandler(txtKodu_KeyDown);
            this.FormClosed += new FormClosedEventHandler(frmStok_FormClosed);
        }

        void frmStok_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Event.Invoke(null, null);
        }

        void txtKodu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (!string.IsNullOrEmpty(txtKodu.Text))
                {
                    UrunBul(txtKodu.Text);
                }
            }
        }

        void frmStok_Load(object sender, EventArgs e)
        {
            cmbCinsi.SelectedIndex = 0;
            cmbDoviz.SelectedIndex = 0;
            using (SksEntity ent = new SksEntity())
            {
                cmbKdv.DataSource = ent.VergiOranlari.ToList();
                cmbKdv.DisplayMember = "Aciklama";
                if (cmbKdv.Items.Count > 0)
                    cmbKdv.SelectedIndex = 0;
            }

            if (!string.IsNullOrEmpty(StokKodu))
                UrunBul(StokKodu);
        }

        private void btnKapat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void UrunBul(string kodu)
        {
            Temizle();
            using (SksEntity ent = new SksEntity())
            {
                Stok stk = ent.Stoklar.Where(x => x.Kodu == kodu).FirstOrDefault();
                if (stk != null)
                {
                    txtKodu.Text = kodu;
                    txtAdi.Text = stk.Adi;
                    cmbCinsi.SelectedIndex = stk.Cinsi;
                    cmbDoviz.SelectedIndex = stk.DovizCinsi;
                    txtGrup1.Text = stk.Filtre1;
                    txtGrup2.Text = stk.Filtre2;
                    txtGrup3.Text = stk.Filtre3;
                    txtGrup4.Text = stk.Filtre4;
                    txtGrup5.Text = stk.Filtre5;
                    txtFiyat1.Text = stk.Fiyat1.ToString();
                    txtFiyat2.Text = stk.Fiyat2.ToString();
                    txtFiyat3.Text = stk.Fiyat3.ToString();
                    txtFiyat4.Text = stk.Fiyat4.ToString();
                    txtFiyat5.Text = stk.Fiyat5.ToString();
                    txtIndirimOrani.Text = stk.IndirimOrani.ToString();
                    for (int i = 0; i < cmbKdv.Items.Count; i++)
                    {
                        if (((VergiTanim)cmbKdv.Items[i]).ID == stk.VergiID)
                        {
                            cmbKdv.SelectedIndex = i;
                            break;
                        }
                    }
                    foreach (Barkod item in ent.Barkodlar.Where(x => x.StokID == stk.ID).ToList())
                    {
                        lstBarkodlar.Items.Add(item);
                    }
                }
            }
        }

        private void btnKaydet_Click(object sender, EventArgs e)
        {
            using (SksEntity ent = new SksEntity())
            {
                Stok stk = ent.Stoklar.Where(x => x.Kodu == txtKodu.Text).FirstOrDefault();
                if (stk != null)
                {
                    stk.Adi = txtAdi.Text;
                    stk.Cinsi = (byte)cmbCinsi.SelectedIndex;
                    stk.DovizCinsi = (byte)cmbDoviz.SelectedIndex;
                    stk.Filtre1 = txtGrup1.Text;
                    stk.Filtre2 = txtGrup2.Text;
                    stk.Filtre3 = txtGrup3.Text;
                    stk.Filtre4 = txtGrup4.Text;
                    stk.Filtre5 = txtGrup5.Text;
                    stk.Fiyat1 = Cevir.Parse<decimal>(txtFiyat1.Text);
                    stk.Fiyat2 = Cevir.Parse<decimal>(txtFiyat2.Text);
                    stk.Fiyat3 = Cevir.Parse<decimal>(txtFiyat3.Text);
                    stk.Fiyat4 = Cevir.Parse<decimal>(txtFiyat4.Text);
                    stk.Fiyat5 = Cevir.Parse<decimal>(txtFiyat5.Text);
                    stk.IndirimOrani = Cevir.Parse<decimal>(txtIndirimOrani.Text);
                    stk.VergiID = ((VergiTanim)cmbKdv.SelectedItem).ID;
                }
                else
                {
                    stk = new Stok();
                    stk.Kodu = txtKodu.Text;
                    stk.Adi = txtAdi.Text;
                    stk.Cinsi = (byte)cmbCinsi.SelectedIndex;
                    stk.DovizCinsi = (byte)cmbDoviz.SelectedIndex;
                    stk.Filtre1 = txtGrup1.Text;
                    stk.Filtre2 = txtGrup2.Text;
                    stk.Filtre3 = txtGrup3.Text;
                    stk.Filtre4 = txtGrup4.Text;
                    stk.Filtre5 = txtGrup5.Text;
                    stk.Fiyat1 = Cevir.Parse<decimal>(txtFiyat1.Text);
                    stk.Fiyat2 = Cevir.Parse<decimal>(txtFiyat2.Text);
                    stk.Fiyat3 = Cevir.Parse<decimal>(txtFiyat3.Text);
                    stk.Fiyat4 = Cevir.Parse<decimal>(txtFiyat4.Text);
                    stk.Fiyat5 = Cevir.Parse<decimal>(txtFiyat5.Text);
                    stk.IndirimOrani = Cevir.Parse<decimal>(txtIndirimOrani.Text);
                    stk.VergiID = ((VergiTanim)cmbKdv.SelectedItem).ID;
                    ent.Stoklar.Add(stk);
                }

                ent.SaveChanges();
                foreach (Barkod b in lstBarkodlar.Items)
                {
                    var bar = ent.Barkodlar.Where(x => x.Barkodu == b.Barkodu).FirstOrDefault();
                    if (bar != null)
                    {
                        bar.BirimAdi = b.BirimAdi;
                        bar.Katsayi = b.Katsayi;
                        bar.StokID = stk.ID;
                    }
                    else
                    {
                        b.StokID = stk.ID;
                        ent.Barkodlar.Add(b);
                    }
                }
                ent.SaveChanges();
                Temizle();
            }
        }

        private void Temizle()
        {
            txtKodu.Text = "";
            txtAdi.Text = "";
            cmbCinsi.SelectedIndex = 0;
            cmbDoviz.SelectedIndex = 0;
            cmbKdv.SelectedIndex = 0;
            txtGrup1.Text = "";
            txtGrup2.Text = "";
            txtGrup3.Text = "";
            txtGrup4.Text = "";
            txtGrup5.Text = "";
            txtFiyat1.Text = "";
            txtFiyat2.Text = "";
            txtFiyat3.Text = "";
            txtFiyat4.Text = "";
            txtFiyat5.Text = "";
            txtIndirimOrani.Text = "";
            txtBarkod.Text = "";
            txtKatsayi.Text = "";
            cmbBirim.Text = "";
            lstBarkodlar.Items.Clear();
        }

        private void btnSil_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtKodu.Text))
            {
                using (SksEntity ent = new SksEntity())
                {
                    Stok stk = ent.Stoklar.Where(x => x.Kodu == txtKodu.Text).FirstOrDefault();
                    if (stk != null)
                    {
                        foreach (Barkod b in ent.Barkodlar.Where(x => x.StokID == stk.ID).ToList())
                        {
                            ent.Barkodlar.Remove(b);
                        }
                        ent.Stoklar.Remove(stk);
                        ent.SaveChanges();
                        Temizle();
                    }
                }
            }
        }

        private void btnEkle_Click(object sender, EventArgs e)
        {
            using (SksEntity ent = new SksEntity())
            {
                if (ent.Barkodlar.Where(x => x.Barkodu == txtBarkod.Text).Select(x => x.ID).Count() == 0)
                {
                    Barkod brkd = new Barkod();
                    brkd.Barkodu = txtBarkod.Text;
                    brkd.BirimAdi = cmbBirim.Text;
                    brkd.Katsayi = Cevir.Parse<decimal>(txtKatsayi.Text);
                    brkd.StokID = -1;
                    lstBarkodlar.Items.Add(brkd);
                    txtKatsayi.Text = "";
                    txtBarkod.Text = "";
                    cmbBirim.SelectedIndex = -1;
                }
            }
        }

        private void btnCikar_Click(object sender, EventArgs e)
        {
            if (lstBarkodlar.SelectedIndex > -1)
            {
                using (SksEntity ent = new SksEntity())
                {
                    string aranan = lstBarkodlar.SelectedItem.ToString();
                    var barkod = ent.Barkodlar.Where(x => x.Barkodu == aranan).FirstOrDefault();
                    if (barkod != null)
                    {
                        ent.Barkodlar.Remove(barkod);
                        ent.SaveChanges();
                    }
                    lstBarkodlar.Items.RemoveAt(lstBarkodlar.SelectedIndex);
                }
            }
        }
    }
}
